import axios from 'axios'
import {ElLoading} from 'element-plus' // 引入 Element Plus 的 Loading 组件
import router from '../router/index.js'
// create an axios instance
const service = axios.create({
    baseURL: import.meta.env.VITE_API_BASE_URL, // baseURL: 'http://127.0.0.1:10108', // baseURL: 'https://fluent-mole-unduly.ngrok-free.app',
    // http://192.168.31.71:5173/smallRedBook
    headers: {
        'Content-Type': 'application/json;charset=UTF-8'
    },
    timeout: 600000 // request timeout
})

// request interceptor
service.interceptors.request.use(config => {
    // 在每个请求开始时启动 loading 动画
    config.loadingInstance = ElLoading.service({
        text: '加载中...', // 自定义 loading 动画的文本
        background: 'rgba(0, 0, 0, 0.7)' // 背景透明度
    })

    // 设置请求头
    config.headers = {
        Accept: 'application/json', 'Content-Type': 'application/json',
    };

    // 如果 token 存在，则将其加到请求头
    const token = localStorage.getItem('token');
    if (token) {
        config.headers.Authorization = token;
    }



    return config
}, error => {
    // 在请求错误时结束 loading 动画
    if (error.config && error.config.loadingInstance) {
        error.config.loadingInstance.close()
    }
    console.log(error) // for debug
    return Promise.reject(error)
})

// response interceptor
service.interceptors.response.use(response => {
    // 请求成功后，关闭 loading 动画
    if (response.config && response.config.loadingInstance) {
        response.config.loadingInstance.close()
    }
    return response
}, error => {
    // 响应错误时，关闭 loading 动画
    if (error.config && error.config.loadingInstance) {
        error.config.loadingInstance.close()
    }
    // 在这里处理响应错误
    if (error.response && error.response.status === 401) {
        console.log("401 Unauthorized Error");
        localStorage.removeItem("token"); // 清除无效的 token
        // 可以在这里跳转到登录页面，或者显示登录提示
        router.push('/login');
    }

    console.log('err' + error) // for debug
    // 如果你需要可以在这里使用提示消息
    // Message({
    //     message: error.message, type: 'error', duration: 5 * 1000
    // })
    return Promise.reject(error)
})

export default service
